from student import *


class MananagerSystem(object):
    def __init__(self):
        self.studenData = []

    def run(self):

        # 加载学员信息
        self.loadStudents()
        while True:
            # 显示功能序号
            self.showNumber()
            # 输入序号
            num = input("请输入功能序号:")

            # 输入1表示添加学员功能
            if num == "1":
                self.addStudent()
            # 输入2表示删除学员功能
            elif num == "2":
                self.delStudent()
            # 输入3表示修改学员功能
            elif num == "3":
                self.updateStudent()
            # 输入4表示查询学员功能
            elif num == "4":
                self.searchStudent()
            # 输入5表示显示所有学员
            elif num == "5":
                self.showStudent()
            # 输入6表示保存学员信息
            elif num == "6":
                self.saveStudent()
            # 输入7表示退出系统
            elif num == "7":
                break

    def showNumber(self):
        print("功能序号描述：")
        print("\t1.添加学员")
        print("\t2.删除学员功能")
        print("\t3.修改学员功能")
        print("\t4.查询学员功能")
        print("\t5.显示所有学员")
        print("\t6.保存学员信息")
        print("\t7.退出系统")

    # 添加学员
    def addStudent(self):
        name = input("请输入学员名称：")
        age = input("请输入学员年龄：")
        no = input("请输入学员学号：")
        stu = Student(name, age, no)
        self.studenData.append(stu)
        print(stu.__dict__)

    # 删除学员功能
    def delStudent(self):
        name = input("请输入学员名称：")
        for stu in self.studenData:
            if stu.name == name:
                self.studenData.remove(stu)
                print("删除成功")
                break
        else:
            print("学员不存在")

    # 修改学员功能
    def updateStudent(self):
        name = input("请输入学员名称：")
        for stu in self.studenData:
            if stu.name == name:
                yes = input(f"需要修改的学员信息：{stu.name},{stu.age},{stu.no},是否继续修改，是：y,否：其它")
                if yes == "y":
                    name = input("请输入学员名称：")
                    age = input("请输入学员年龄：")
                    no = input("请输入学员学号：")
                    stu.name = name
                    stu.age = age
                    stu.no = no
                break
        else:
            print("学员不存在")

    # 查询学员功能
    def searchStudent(self):
        name = input("请输入学员名称：")
        for stu in self.studenData:
            if stu.name == name:
                print(f"需要修改的学员信息：{stu.name},{stu.age},{stu.no},是否继续修改，是：y,否：其它")
                break
        else:
            print("学员不存在")

    # 显示所有学员
    def showStudent(self):
        print(f"姓名\t性别\t手机号")
        for stu in self.studenData:
            print(f"{stu.name}\t{stu.age}\t{stu.no}")

    # 保存学员信息
    def saveStudent(self):
        try:
            f = open("student.data", "w")
        except Exception as error:
            print(error)
        else:
            # 列表推导式将实体对象推到成字典类型
            stu_list = [stu.__dict__ for stu in self.studenData]
            print(stu_list)
            print(str(stu_list))
            # 将列表对象转换成string类型
            f.write(str(stu_list))
        finally:
            f.close()

    # 加载学员信息
    def loadStudents(self):
        try:
            # 读取数据
            f = open("student.data", "r")
        except:
            f = open("student.data", "w")
        else:
            stu_list = f.read()
            # 将读取出来的数据转换成字典类型的序列
            new_list = eval(stu_list)
            # 再将字典序列推导式成对象序列展示
            self.studenData = [Student(stu["name"],stu["age"],stu["no"]) for stu in new_list]
        finally:
            f.close()
